Site cover image

Site icon imageSen(Qian)’s Memo

This website is Donglin Qian (Torin Sen)’s memo, especially about machine learning papers and competitive programming.

2016-CVPR-Multi-label Ranking from Positive and Unlabeled Data

元論文のリンク

Introduction

multi labelのlearningにもPU使えますよね?あるデータx\mathbf{x}に対して、複数の属性がある(タグ付けみたいに)時がmulti label learning。

この論文の問題設定は以下の3つ。

  1. サンプル x\mathbf{x}にたいして、絶対にpositiveであるラベルがある。
  2. サンプル x\mathbf{x}に対して、そのラベルは付けされいないが、絶対に含まれないというわけではないラベルがもう1つ。
  3. サンプル x\mathbf{x}は複数個のラベルが付きうる。

これをPUに帰着するとき、multi label PU ranking問題にしている。

Related Work

label rankingベースの研究がメイン。これはすべてのpositive例をnegative例の上に順位付けするという問題設定で、損失はRank Lossなるものであり先行研究でも提案されている。WSABIEとか。

Multi-label Ranking

問題設定。

  • X\mathcal{X}はサンプル空間であり、 x\mathbf{x}はサンプル。
  • ラベルは合計で mm種類あり、 Y={0,1}m\mathcal{Y} = \lbrace 0, 1 \rbrace ^ mである。1は付いていて、0は付いてない。
  • 与えられたデータセットは S={(xi,yi)}i=1NS = \lbrace (\mathbf{x} _i, y _i) \rbrace _{i = 1} ^ Nである。
  • 訓練する識別器は f(x)=(f1(x),,fm(x))T\mathbf{f}(\mathbf{x}) = (f _1(\mathbf{x}), \cdots, f _m(\mathbf{x})) ^ Tである。各ラベルについてつくかつかないかを予測する。
  • 目標としては、以下のように、損失を最小限に抑えること。
arg minfL(f)=Ex,y[L(f(x),y)]\argmin _{\mathbf{f}} L(\mathbf{f}) = \mathbb{E} _{\mathbf{x}, \mathbf{y}} [L(f(\mathbf{x}), \mathbf{y})]

そして、ここではRank Lossを使う。

Rank Loss

Lrank(f(x),y)=i,j:yi=1,yj=0[[fi(x)<fj(x)]]+12[[fi(x)=fj(x)]]L _{rank}(\mathbf{f}(\mathbf{x}), \mathbf{y}) = \sum _{i, j : y _i = 1, y _j = 0} [[f _i(\mathbf{x}) < f _j(\mathbf{x})]] + \frac{1}{2} [[f _i(\mathbf{x}) = f _j(\mathbf{x})]]

[[]][[ \cdot ]]演算は指示関数で、条件を満たすならば1となる。

Ranking関数について、今回は0と1の二値しかないので上のような形になっている。すべての大小関係がはっきりしているペアについて、順序がひっくり返っているならペナルティ1、同じ順序なら0.5のペナルティを足すかたち

これを用いて式変形すると、

arg minfL(f)=Ex,y[L(f(x),y)]=yYp(Y)Exy[Lrank(f(x),y)]=yYp(Y)i,j:yi=1,yj=0Exy[[[fi(x)<fj(x)]]+12[[fi(x)=fj(x)]]]\argmin _{\mathbf{f}} L(\mathbf{f}) = \mathbb{E} _{\mathbf{x}, \mathbf{y}} [L(f(\mathbf{x}), \mathbf{y})]\\ = \sum _{\mathbf{y} \in \mathcal{Y}} p(\mathbf{Y}) \mathbb{E} _{\mathbf{x} | \mathbf{y}} [L _{rank}(\mathbf{f}(\mathbf{x}), \mathbf{y})] \\ =\sum _{\mathbf{y} \in \mathcal{Y}} p(\mathbf{Y}) \sum _{i, j : y _i = 1, y _j = 0} \mathbb{E} _{\mathbf{x} | \mathbf{y}} [ [[f _i(\mathbf{x}) < f _j(\mathbf{x})]] + \frac{1}{2} [[f _i(\mathbf{x}) = f _j(\mathbf{x})]]]

この期待値の部分はmiss rank rateというものであり、以下のように書き直すこともできる。

R(x,i,j)=Exy[[[fi(x)<fj(x)]]+12[[fi(x)=fj(x)]]]=Exyi=1,yj=0[[[fi(x)<fj(x)]]+12[[fi(x)=fj(x)]]]=p(fi(x)<fj(x)yi=1,yj=0)+12p(fi(x)=fj(x)yi=1,yj=0)R(\mathbf{x}, i, j) = \mathbb{E} _{\mathbf{x} | \mathbf{y}} [ [[f _i(\mathbf{x}) < f _j(\mathbf{x})]] + \frac{1}{2} [[f _i(\mathbf{x}) = f _j(\mathbf{x})]]] \\ = \mathbb{E} _{\mathbf{x} | y _i = 1, y _j = 0} [ [[f _i(\mathbf{x}) < f _j(\mathbf{x})]] + \frac{1}{2} [[f _i(\mathbf{x}) = f _j(\mathbf{x})]]] \\ = p(f_i(\mathbf{x}) < f_j(\mathbf{x}) | y _i = 1, y_j=0) + \frac{1}{2} p(f_i(\mathbf{x}) = f_j(\mathbf{x}) | y _i = 1, y_j=0)

これを使って書き直せば、以下のように損失関数になる。

Lrank(x,y)=i,j:yi=1,yj=0p(yi=1,yj=0)R(x,i,j)=1i<jmp(yi=1,yj=0)R(x,i,j)+p(yi=0,yj=1)p(x,j,i)L _{rank}(\mathbf{x}, \mathbf{y}) = \sum _{i, j : y _i = 1, y _j = 0} p(y_i=1, y_j=0) R(\mathbf{x}, i,j) \\ = \sum _{1 \leq i < j \leq m } p(y_i=1,y_j=0) R(\mathbf{x}, i,j) + p(y_i=0,y_j=1)p(\mathbf{x}, j,i)

i<jという条件を付けてループを回せば、このように「iは正しくjは違う確率」と「iは違いjは正しい確率」の和を考えている不整合を2つ分加算すればよく、計算が楽にできる。

この研究のシナリオはCase-Control

Multi-label PU ranking

前述のように、multi-label PU rankingは以下の2つのラベルの状況から学習するものであった。

  1. サンプル x\mathbf{x}にたいして、明確にラベルが割り当てられている場合、それはPositiveと見なせる。
  2. ラベルが割り当てられてない場合、必ずNegativeではないとは限らない。Unlabeledとみなせる。

cost sensitiveなPU Learningへの帰着

上の式に cij,cjic_{ij}, c_{ji}という、クラスiがクラスjに誤分類された時のペナルティの重みを付ける。論文

例によって、 R(x,i,j)R(\mathbf{x}, i,j)p(yi=1,yj=0)p(y_i=1,y_j=0)なども、Negativeデータがないので計算できない。これをPUで計算するために以下のような新たな誤分類率? RX(x,i,j)R _X(\mathbf{x},i,j)を定義する。

RX(x,i,j)=p(fi(x)<fj(x)si=1,sj=0)+12p(fi(x)=fj(x)si=1,sj=0)R _X(\mathbf{x}, i,j) = p(f_i(\mathbf{x}) < f_j(\mathbf{x}) | s _i =1, s_j=0) + \frac{1}{2}p(f_i(\mathbf{x})=f_j(\mathbf{x})|s_i=1,s_j=0)

ラベルがついているか、ついていないかの ssで判断する。ここでのssはPN分類で与えられたラベルyyの代わりであるPUのラベル。

これを不適切そうだが、割り切って使うとして、損失関数を新たに書き換えてみると以下のようになる。

L^rank(x)=1i,jmp(si=1,sj=0)RX(x,i,j)+p(si=0,sj=1)RX(x,j,i)\hat{L} _{rank} (\mathbf{x}) = \sum _{1 \leq i,j \leq m} p(s_i=1,s_j=0)R_X(\mathbf{x},i,j) + p(s_i=0,s_j=1)R_X(\mathbf{x},j,i)

仮定はSCAR、Select Completely At Randomで選択される。つまり、p(yi=1si=0)=p(yi=1)p(y_i = 1 | s_i = 0) = p(y_i = 1)である(選ばれるかどうかと関係なしにラベルがつく確率は同じ)

そして、p(xsi=1)=p(xyi=1)p(\mathbf{x} | s_i = 1) = p(\mathbf{x} | y_i = 1)、PUの時のラベル付きは、PNの時のPositiveサンプルと同じような分布が得られるというのもSCAR仮定からわかる。

2014 du Plessisらの書き換えと同様に、 RXR_Xは以下のように書き換えできる。

πji=p(yj=1yi=1)RX(x,i,j)=p(fi(x)<fj(x)yi=1,yj=1)+12p(fi(x)=fj(x)yi=1,yj=1)\pi _{j|i} = p(y_j=1|y_i=1) \\ R _{-X}(\mathbf{x},i,j)=p(f_i(\mathbf{x}) < f_j(\mathbf{x}) | y_i=1,y_j=1) + \frac{1}{2} p(f_i(\mathbf{x}) = f_j(\mathbf{x}) | y_i=1,y_j=1) \\
  • πji\pi_{j|i}はi番目の属性がPositiveであるときの、j番目もPositiveである確率。
  • RXR_{-X}は、足していく値は RXR_Xと同じだが、 yi=1,yj=1y_i=1,y_j=1という前提条件としている。
    • RXR_Xyyではなくssが条件であったし、そのうえsi=1,sj=0s_i = 1, s_j = 0という条件であった。
  • yi=1y_i=1という条件付きの下で、 yjy_jについて全パターンを集めて、 πji=p(yj=1yi=1)\pi _{j|i} = p(y _j=1| y _i=1)の割合でそれぞれ配分している。

このように、RX,RXR_X, R_{-X}を定義されたら以下のように、📄Arrow icon of a page link2014-NIPS-[Ramp]Analysis of Learning from Positive and Unlabeled Data, 📄Arrow icon of a page link2015-ICML-[uPU] Convex Formulation for Learning from Positive and Unlabeled Data で提案されたRXR_Xの分解をすることができる。

RX(x,i,j)=(1πji)R(x,i,j)+πjiRX(x,i,j)R_X(\mathbf{x},i,j)=(1-\pi _{j|i})R(\mathbf{x},i,j)+\pi_{j|i} R_{-X}(\mathbf{x},i,j)

2014で提案していた RXR_Xの構成を、 yi=1y_i=1という前提条件の下でやってみたというかたち。

  • πji\pi _{j | i}の割合のyi=1yj=1y_i = 1 | y_j = 1の条件の下での損失
  • 1π1 - \pi割合のyi=0yj=1y_i = 0 | y _j = 1の条件の下での損失

つまり、RXR_XというPUで使わないといけない損失は、上のようにPNで計算できる形に分解できる。これをうまく使って、PNの式出てて来る右辺を左辺で置き換えたい

次のように R(x,i,j)R(\mathbf{x},i,j)について上の式を解くと、以下のが得られる。を式変形できる。

R(x,i,j)=11πji(RX(x,i,j)πjiRX(x,i,j))R(\mathbf{x},i,j)=\frac{1}{1-\pi_{j|i}} (R_X(\mathbf{x},i,j)-\pi_{j|i}R_{-X}(\mathbf{x},i,j)) \\

これを用いて、集計を行うと以下のようになる。RX(x,i,j)+RX(x,j,i)=1R_{-X}(\mathbf{x},i,j)+R_{-X}(\mathbf{x},j,i)=1を使う。

Image in a image block

結果として、以下の

Lrank(x)=1i,jm{p(yi=1)RX(x,i,j)+p(yj=1)RX(x,j,i)p(yi=1,yj=1)}L _{rank}(\mathbf{x}) = \sum _{1 \leq i, j \leq m} \{ p(y_i=1) R_X(\mathbf{x},i,j)+ \\ p(y_j=1)R_X(\mathbf{x},j,i)-p(y_i=1,y_j=1) \}

が目標関数として得られる。p(yi=1)p(y_i=1)のClass Priorは事前に得られる。p(yi=1,yj=1)p(y_i = 1, y_j = 1)は各クラス間に依存関係がないなら、単純に確率の積で求まるし、あってもLabeledされたデータから推定すればいい。

対称的な損失関数

Lrank(x,y)=i,j:yi=1,yj=0p(yi=1,yj=0)R(i,j)=1i<jmp(yi=1,yj=0)R(i,j)+p(yi=0,yj=1)R(j,i)L _{rank}(\mathbf{x}, \mathbf{y}) = \sum _{i, j : y _i = 1, y _j = 0} p(y_i=1, y_j=0) R(i,j) \\ = \sum _{1 \leq i < j \leq m } p(y_i=1,y_j=0) R(i,j) + p(y_i=0,y_j=1)R(j,i)

この式を RXR_Xに書き換えることによって、以下の形となる。

Image in a image block

01損失では最適化できないので、代理損失を使うことを考える。

Image in a image block

📄Arrow icon of a page link2014-NIPS-[Ramp]Analysis of Learning from Positive and Unlabeled Data で提案していた l(x)+l(x)=1l(x) + l(-x)=1となる対称な損失関数を、ここでも使うことができる。

ここでは、2014 du Plessisの提案にあるように、ランプ損失を使う。多クラス分類版としては、以下のものとなっている。多クラスの分類器の引いた差をRamp損失にそのまま突っ込んでいる

Image in a image block

グラフにしてみると以下のような形

Image in a image block

Experiments

使用したデータセットは以下の3つ。

  • 合成したもの
  • MSCOCO
  • NUS-WIDE

具体的な内容はここをみる。

Settings

ground truthがpositiveのラベルの欠損率を0から80%までで試した。

実験自体は、Single-Training-Set、Select Completely At Randomの設定で行っている。Case-Controlでもできるのでは…?

  1. 割合から乗算して欠損数を得る。
  2. 各クラスごとに何個欠けるのかについて、多項分布に従った1つのパターンをランダムに選ぶ。
  3. 各クラスで何個欠損するのかが決まったので、あとはSCARで選ぶ。

識別器の実装は

f(x)=WTx\mathbf{f}(\mathbf{x}) = W ^ T \mathbf{x}

とこのように多次元SVMであり、optimizationは無印の勾配降下法でやった。

多次元SVMの説明はこちら: 📄Arrow icon of a page linkNNDL 第3章 線形学習

この上で、L2正則化も行った。

Synthetic Dataset

  1. 各データについて、nn個のラベルが付くとして、これをポアソン分布から得る。
  2. nn個のラベルについてそれぞれ、クラス ccを選ぶ確率自体を、多項分布に従い選ぶ。
  3. そのデータについて、特徴のサンプル回数kk自体もポアソン分布から得る。
    1. 特徴のサンプル回数は、各クラスがそれぞれ特徴を持つとして、それの表現をサンプリング?
  4. kk回のサンプリングをそれぞれ行い、その得た特徴の和をサンプルとしている。

2000のテスト、8000の訓練データ。

実験結果として、全体のクラス数が2と少ないなら、ラベル付きが多ければ多いほど、手法がいい性能を持つが情報が減ると下がる。ただし8まで増えてしまうとなれば性能が低くなる。 全データでののべラベル数/クラス数の割合が性能の重要な鍵だとわかった。

Image Annotation Dataset

画像のデータセット2つ日してベンチマークを行った。訓練済み7層のAlexNetを使った。

Discussion

使用した損失関数と理想的な01損失の損失関数によるRiskの差は、

  • p(s=0y=1)p(s=0|y=1)の項目
  • ラベルのペア内の両方のラベルが割り当てられる確率(原文ままこれなに?)に比例する。

また、SCARの設定で問題を解いたので、Case Controlに適用させるとやはり、欠損率が低くても性能が低下する。

提案手法はラベルの欠損率が2割以上の時に有用である

また、ラベルの存在自体にバイアスがあるとき、例えば犬、猫、人間は高確率で一緒に存在するならば、「猫、人間」、「犬、猫、人間」とラベル付けされたデータは似た特徴を持つかもしれない(というかそもそも同じかもしれない)このようなデータの分離はさすがにこの手法では無理

クラス事前確率の π=p(y=+1)\pi=p(y=+1)は雑に推定したが実用上はもっと丁寧に推定するべきだな。